/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package socof_webcrawler;

import DataBase.Coleccao;
import DataBase.Ficheiro;
//import DataBase.DBAccess;
import htmlparser.UrlParser;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;

public class ExecutParser implements Runnable {

    private ResizeableSemaphore semaphore;
    ArrayList<Ficheiro> files2Parse = new ArrayList<>();
    ArrayList<Ficheiro> files2Download = new ArrayList<>();
    Ficheiro obj = new Ficheiro();
//    Coleccao listOfFiles = new Coleccao();
    Coleccao listOfFiles = Coleccao.getInstance();
    //DBAccess db = new DBAccess();
    private UrlParser parser = new UrlParser();
    ArrayList<Ficheiro> links;

    public ExecutParser(ResizeableSemaphore sem) throws InterruptedException {
        this.semaphore = sem;
        this.semaphore.acquire();
    }

    @Override
    public void run() {
        files2Parse = listOfFiles.getListaParse(SOCOF_WebCrawler.getDOMAIN());
        System.err.println("LIsta para parse: " + listOfFiles.getListaParse(SOCOF_WebCrawler.getDOMAIN()).toString());

        try {
            System.out.println("Downloader: " + this.toString() + " started...");
            if (!files2Parse.isEmpty()) {
                obj = files2Parse.get(0);
                listOfFiles.writeData(obj);
//                obj = listOfFiles.setEstado(obj.getId(), obj.DB_STATE_PARSING);
                obj.setEstado(obj.DB_STATE_PARSING);
                listOfFiles.writeData(obj);
                links = parser.getUrl(obj, "all");

                obj.setEstado(this.obj.DB_STATE_COMPLETE);
                listOfFiles.writeData(obj);
//                links.add(obj);

                listOfFiles.writeDataAll(links);
            } else {
                System.err.println("nada para parser");
                Thread.sleep(2000);
            }

            System.out.println("Parser: " + this.toString() + " finished...");
            this.semaphore.release();
        } catch (InterruptedException ex) {
            Logger.getLogger(ExecutParser.class
                    .getName()).log(Level.SEVERE, null, ex);
        }
    }

    private void verifyDuplicates() {
        if (links.size() > 1) {
            ArrayList<Ficheiro> temp = links;
            boolean result = true;
            for (Ficheiro ficheiro : links) {
                temp.remove(ficheiro);
                if (!(temp.isEmpty())) {
                    result = parser.verifyExistance(ficheiro, temp);
                }
                if (result = false) {
                    links.remove(ficheiro);
                }
            }
        }
    }
}
